package ui;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.layout.HorizontalLayout;
import org.uqbar.arena.layout.VerticalLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.SimpleWindow;
import org.uqbar.arena.windows.WindowOwner;

import applicationModels.Juego;
import applicationModels.Mejorar;

import dominio.Mejora;
import dominio.Planta;

public class MejorasPlantaWindow extends SimpleWindow<Mejorar> {

	private static final long serialVersionUID = 1L;
	
	public MejorasPlantaWindow(WindowOwner parent, Planta planta) {
		super(parent, new Mejorar(Juego.getInstance().getUsuario(), planta));
	}

	@Override
	protected void addActions(Panel actionsPanel) {
		new Button(actionsPanel)
			.setCaption("Comprar")
			.onClick(new MessageSend(this.getModelObject(), "mejorar"));
		
		new Button(actionsPanel)
			.setCaption("Cerrar")
			.onClick(new MessageSend(this, "close"));
	}

	@Override
	protected void createFormPanel(Panel mainPanel) {
		//this.setTitle("Plantas vs Zombies");
		mainPanel.setLayout(new VerticalLayout());
		
		new Label(mainPanel).setText("Estas mejorando: "+ this.getModelObject().getPlantaAMejorar().getNombre());
		
		new Label(mainPanel).setText("Recursos: ");
		new Label(mainPanel).bindValueToProperty("usuario.puntos");
		
		this.mejorasCompradasYDisponiblesPanel(mainPanel);
		
		//new Label(mainPanel).bindValueToProperty("mejoraComprada.nombre");//.setTransformer("mostrar como Haz comprado mejora...");
	}
	
	public void mejorasCompradasYDisponiblesPanel(Panel mainPanel){
		Panel mejoras = new Panel(mainPanel);
		mejoras.setLayout(new HorizontalLayout());
		
		this.mejorasCompradasPanel(mejoras);
		this.mejorasDisponiblesPanel(mejoras);
		
	}
	
	// *************************************************************************
	// ** TABLA CON MEJORAS COMPRADAS
	// *************************************************************************
	
	public void mejorasCompradasPanel(Panel mainPanel) {
		Panel mejoras = new Panel(mainPanel);
		mejoras.setLayout(new VerticalLayout());
		
		new Label(mejoras).setText("Mejoras Compradas");
		
		this.createMejorasCompradasGrid(mejoras);
	}
	
	protected void createMejorasCompradasGrid(Panel mainPanel) {
		Table<Mejora> table = new Table<Mejora>(mainPanel, Mejora.class);
		table.setHeigth(200);
		table.setWidth(450);
		table.bindItemsToProperty("plantaAMejorar.mejorasCompradas");

		this.describeMejorasCompradasGrid(table);
	}
	
	/**
	 * Crea tres columnas para la tabla de mejoras disponibles,
	 *  ( Nombre de la mejora, Mejora Ataque, Mejora Defensa )
	 * @param table
	 */
	protected void describeMejorasCompradasGrid(Table<Mejora> table) {
		new Column<Mejora>(table) //
			.setTitle("Nombre")
			//.setFixedSize(150)
			.bindContentsToProperty("nombre");

		new Column<Mejora>(table) //
			.setTitle("Mejora Ataque")
			//.setFixedSize(150)
			.bindContentsToProperty("ataque");
		
		new Column<Mejora>(table) //
			.setTitle("Mejora Defensa")
		//	.setFixedSize(150)
			.bindContentsToProperty("defensa");
	}
	
	
	// *************************************************************************
	// ** TABLA CON MEJORAS DISPONIBLES
	// *************************************************************************
	
	public void mejorasDisponiblesPanel(Panel mainPanel) {
		Panel mejoras = new Panel(mainPanel);
		mejoras.setLayout(new VerticalLayout());
		
		new Label(mejoras).setText("Mejoras Disponibles");
		
		this.createMejorasDisponiblesGrid(mejoras);
	}
	
	protected void createMejorasDisponiblesGrid(Panel mainPanel) {
		Table<Mejora> table = new Table<Mejora>(mainPanel, Mejora.class);
		table.setHeigth(200);
		table.setWidth(450);

		table.bindItemsToProperty("plantaAMejorar.mejorasDisponibles");
		table.bindValueToProperty("mejoraAComprar");

		this.describeMejorasDisponiblesGrid(table);
	}
	
	/**
	 * Crea cuatro columnas para la tabla de mejoras disponibles,
	 *  ( Nombre de la mejora, Precio, Mejora Ataque, Mejora Defensa )
	 * @param table
	 */
	protected void describeMejorasDisponiblesGrid(Table<Mejora> table) {
		new Column<Mejora>(table) //
			.setTitle("Nombre")
			//.setFixedSize(150)
			.bindContentsToProperty("nombre");

		new Column<Mejora>(table) //
			.setTitle("Precio")
			//.setFixedSize(50)
			.bindContentsToProperty("precio");

		new Column<Mejora>(table) //
			.setTitle("Mejora Ataque")
			//.setFixedSize(150)
			.bindContentsToProperty("ataque");
		
		new Column<Mejora>(table) //
			.setTitle("Mejora Defensa")
			//.setFixedSize(150)
			.bindContentsToProperty("defensa");
	}
}
